<?php

namespace App\Http\Middleware;

use Closure;

class AuthCheck
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 做一个简单的权限验证 1. 验证用户是否是超级管理员，如果是则不要做权限限制 2. 如果不是超级管理员，则验证对应的用户的权限信息
        // 获取当前用户的 角色身份[是否超级管理员] 获取当前访问的权限[权限]
        $superName = 'super';// 代表是超级管理员
        $isSuper = \Illuminate\Support\Facades\Auth::guard('backLogin')->user()->hasRole($superName);

        $currentAuth = '/' . $request->path(); // 当前访问的地址栏里面的URI
        // 不是超级管理员，则要验证是否拥有访问该页面的权限
        $viewStatus = \Illuminate\Support\Facades\Auth::guard('backLogin')->user()->hasAuth($currentAuth);
        // 注意：如果当前访问的是公共权限，则该如何处理？/admin/index 首页 admin/welcome 一般定义配置文件
        // 在laravel里面如何定义属于自己的配置文件信息 读取公共配置项
        $publicAuth = config('my.public'); // config/my.php
        // 读法：如果不是超级管理员，并且如果权限不在用户的权限列表里面，最后如果权限也不是公共权限，则没有访问的机会了
        if(!$isSuper && !$viewStatus && !in_array($currentAuth, $publicAuth) ){
            alert()->error('无权限访问！');
            return redirect('/admin/index');
        }

        return $next($request);
    }
}
